2019.8.2更新
对象赋值
在对象/数组中直接提取属性/值
1
2
3
4var [b]=[1,2,3]
//b=1
var {a}={a:1}
//a=1引用类型
1
2
3
4
5var f=[1,2,3]
//f=[1,2,3,4]
var ff=f
ff.push(5)
//f=[1,2,3,4,5]ES6 扩展运算符(…)
1 解构赋值
用于从一个对象取值,将目标对象所有可遍历的属性,且尚未读取的属性,分配到指定对象上。
1
2
3
4
5//example1
var {a,b,...c}={a:1,b:2,cc:3,dd:4}
//a=1
//b=2
//c={cc:3,dd:4}解构赋值要求等号右边为对象(不能是undefined或null),且解构赋值必须是最后一个参数’
3.2 扩展运算符
对象的扩展运算符(…)用于取出参数对象的所有可遍历属性,拷贝到当前对象之中。
1 | var obj1={a:1,b:2,c:4} |
- 深拷贝与浅拷贝/复制
- 浅拷贝:将原对象/数组的引用直接赋值给新对象,新数组/对象只是原数组/对象的一个引用;
- 深拷贝:创建一个新的数组/对象,将原数组/对象的元素或各项属性拷贝过来。
- Array.of()与Array()
1 | var a=Array.of(1) |
2019.8.3 更新
- Map
Map相当于Object,但比Object更好用,区别在于Map可以设置的键值可以为函数。一个Object的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值,包括函数、对象、基本类型。
Map 中的键值是有序的,而添加到对象中的键则不是。因此,当对它进行遍历时,Map 对象是按插入的顺序返回键值。
你可以通过 size 属性直接获取一个 Map 的键值对个数,而 Object 的键值对个数只能手动计算。
Map 可直接进行迭代,而 Object 的迭代需要先获取它的键数组,然后再进行迭代。
Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。虽然 ES5 开始可以用 map = Object.create(null) 来创建一个没有原型的对象,但是这种用法不太常见。
Map 在涉及频繁增删键值对的场景下会有些性能优势。
2019.8.7 更新
- NaN的类型是 Number
- undefined的类型是undefined
- null的类型是object
- 命名符号不能包括:- + * / # @ ^ %
- 命名符号可以有:_ $